﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;

namespace PRE
{
    public partial class FrmSinhvien : DevExpress.XtraEditors.XtraForm
    {
        ServiceReference_SV.Service1SoapClient sr_sv = new ServiceReference_SV.Service1SoapClient();
        ServiceReference_Lophoc.WS_LophocSoapClient sr_lophoc = new ServiceReference_Lophoc.WS_LophocSoapClient();

        IList<ServiceReference_SV.Sinhvien> tb;
        IList<ServiceReference_Lophoc.Lophoc> tb_lop; 

        private static bool _isAdd;
        private static bool _isEdit; 

        public FrmSinhvien()
        {
            InitializeComponent();
        }

        private void FrmSinhvien_Load(object sender, EventArgs e)
        {
            tb = (IList<ServiceReference_SV.Sinhvien>)sr_sv.ReadList();
            tb_lop = (IList<ServiceReference_Lophoc.Lophoc>)sr_lophoc.SelectLophoc();
            Readonly(); ChangeStatus(); lbMsg.Visible = false; bar1.Visible = true;

            grcMain.DataSource = tb;
            cboLophoc.Properties.DataSource = tb_lop;

            if (tb != null)
            {
                ClearDataBindings();
                if(tb.Count > 0)
                    DataBindings();
            }
        }

        #region Base

        private void DataBindings()
        {
           // var tb = (IList<ServiceReference_SV.Sinhvien>)sr_sv.ReadList();
            txtMSSV.DataBindings.Add("EditValue", tb, ".mssv");
            txtHoten.DataBindings.Add("EditValue", tb, ".hoten");
            radioGioitinh.DataBindings.Add("EditValue", tb, ".gioitinh");
            dteNgaysinh.DataBindings.Add("EditValue", tb, ".ngaysinh");
            txtDiachi.DataBindings.Add("EditValue", tb, ".diachi");
            cboLophoc.DataBindings.Add("EditValue", tb, ".lophoc_id");
        }

        private void ClearDataBindings()
        {
            txtMSSV.DataBindings.Clear();
            txtHoten.DataBindings.Clear();
            radioGioitinh.DataBindings.Clear();
            dteNgaysinh.DataBindings.Clear();
            txtDiachi.DataBindings.Clear();
            cboLophoc.DataBindings.Clear();
        }

        private void Readonly(bool isTrue = true)
        {
            txtMSSV.Properties.ReadOnly = isTrue;
            txtHoten.Properties.ReadOnly = isTrue;
            radioGioitinh.Properties.ReadOnly = isTrue;
            dteNgaysinh.Properties.ReadOnly = isTrue;
            txtDiachi.Properties.ReadOnly = isTrue;
            cboLophoc.Properties.ReadOnly = isTrue;

            grcMain.Enabled = isTrue;
        }

        private void ChangeStatus(bool isTrue = true)
        {
            btnAdd.Enabled = isTrue;
            btnEdit.Enabled = isTrue;
            btnDelete.Enabled = isTrue;
            btnRefresh.Enabled = isTrue;
            btnClose.Enabled = isTrue;

            btnSave.Enabled = !isTrue;
            btnCancel.Enabled = !isTrue;
        }

        private void ClearData()
        {
            txtMSSV.ResetText();
            txtHoten.ResetText();
            radioGioitinh.EditValue = true;
            dteNgaysinh.EditValue = DateTime.Now;
            txtDiachi.ResetText();
            cboLophoc.ItemIndex = -1;
        }

        #endregion

        #region Button

        private void btnAdd_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            ClearDataBindings();
            Readonly(false); ChangeStatus(false); ClearData();
            txtMSSV.Focus(); _isAdd = true; _isEdit = false; lbMsg.Visible = true;
        }

        private void btnEdit_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            Readonly(false); ChangeStatus(false);
            txtMSSV.Properties.ReadOnly = true;
            txtHoten.Focus(); _isAdd = false; _isEdit = true;
        }

        private void btnDelete_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            int id = Convert.ToInt32(grvMain.GetFocusedRowCellValue("id"));
            if (MessageBox.Show("Bạn có muốn xóa không ?", "Thông Báo", MessageBoxButtons.OKCancel) == DialogResult.OK)
            {
                var ok = sr_sv.DeleteSV(id);
                if (ok)
                    FrmSinhvien_Load(sender, e);
                else
                    MessageBox.Show("Lỗi! Vui lòng kiểm tra lại dữ liệu", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnRefresh_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            FrmSinhvien_Load(sender, e);
        }

        private void btnSave_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if (_isAdd)
            {
                if (txtMSSV.Text == "" || txtHoten.Text == "" || txtDiachi.Text == "")
                    MessageBox.Show("Lỗi! Vui lòng nhập đầy đủ thông tin", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                else
                {
                    ServiceReference_SV.Sinhvien sv = new ServiceReference_SV.Sinhvien();

                    sv.mssv = txtMSSV.Text;
                    sv.hoten = txtHoten.Text;
                    sv.gioitinh = Convert.ToInt32(radioGioitinh.EditValue);
                    sv.ngaysinh = Convert.ToDateTime(dteNgaysinh.EditValue);
                    sv.diachi = txtDiachi.Text;
                    sv.lophoc_id = Convert.ToInt32(cboLophoc.EditValue);

                    var ok = sr_sv.InsertSV(sv);
                    if (ok)
                    {
                        FrmSinhvien_Load(sender, e);
                        btnAdd_ItemClick(sender, e);
                    }
                    else
                    {
                        MessageBox.Show("Lỗi! Vui lòng kiểm tra lại dữ liệu", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        txtMSSV.Focus();
                    }
                }
            }

            if (_isEdit)
            {
                ServiceReference_SV.Sinhvien sv = new ServiceReference_SV.Sinhvien();
                int _id = Convert.ToInt32(grvMain.GetFocusedRowCellValue("id"));

                sv.id = _id;
                sv.hoten = txtHoten.Text;
                sv.gioitinh = Convert.ToInt32(radioGioitinh.EditValue);
                sv.ngaysinh = Convert.ToDateTime(dteNgaysinh.EditValue);
                sv.diachi = txtDiachi.Text;
                sv.lophoc_id = Convert.ToInt32(cboLophoc.EditValue);

                var ok = sr_sv.UpdateSV(sv);
                if (ok)
                {
                    FrmSinhvien_Load(sender, e);
                    Readonly(); ChangeStatus();
                }
                else
                {
                    MessageBox.Show("Lỗi! Vui lòng kiểm tra lại dữ liệu", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    txtHoten.Focus();
                }
            }

        }

        private void btnCancel_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            FrmSinhvien_Load(sender, e);
        }

        private void btnClose_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            this.Close();
        }

        #endregion

        private void txtMSSV_TextChanged(object sender, EventArgs e)
        {
            ServiceReference_SV.Sinhvien sv = new ServiceReference_SV.Sinhvien();
            sv.mssv = txtMSSV.Text;
            tb = sr_sv.Check_MSSV(sv);
            if (tb.Count > 0)
            {
                lbMsg.Text = "Mã số sinh viên đã tồn tại trong hệ thống, vui lòng nhập lại";
                txtMSSV.Focus();
            }
            else
                lbMsg.Text = "";
        }

    }
}